home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Examples / IndexingKit / ToDoList / Vocab.m < prev   
Encoding:
Text File  |  1993-02-16  |  2.2 KB  |  106 lines

  1. /*
  2. Vocab.m - Copyright (c) 1992 NeXT Computer, Inc.
  3.  
  4. You may freely copy, distribute and reuse the code in this example.
  5. NeXT Computer, Inc. disclaims any warranty of any kind, expressed or implied, 
  6. as to its fitness for any particular use.
  7. */
  8.  
  9. #import <appkit/appkit.h>
  10.  
  11. #import "Vocab.h"
  12. #import "MainDelegate.h"
  13. #import    "FindPanel.h"
  14.  
  15. @implementation VocabularyControl
  16.  
  17. - setBrowser:aBrowser { browser= aBrowser; return self; }
  18.  
  19. - windowDidBecomeKey:sender
  20. {
  21.     [self setTarget:self];
  22.     return self;
  23. }
  24.  
  25. - setTarget:aTarget
  26. {
  27.     id window = [browser window];
  28.     target = aTarget;
  29.     cursor = [[[NXApp delegate] recordManager] cursorForAttributeNamed:"TheContent"];
  30.     [browser setDoubleAction:@selector(browserDoubleClick:)];
  31.     [window disableFlushWindow];
  32.     [browser loadColumnZero];
  33.     [window reenableFlushWindow];
  34.     [window flushWindow];
  35.     return self;
  36. }
  37.  
  38. - (int) browser:sender getNumRowsInColumn:(int) column
  39. {
  40.     return (count = [[cursor btree] count]);
  41. }
  42.  
  43. - browser:sender loadCell:cell atRow:(int) row inColumn:(int) column
  44. {
  45.     int        i;
  46.     int        times;
  47.     char    *key;
  48.     unsigned    length;
  49.  
  50.     count = [[cursor btree] count];
  51.     if (hintRow == 0) [cursor setFirst];
  52.     if (row < hintRow)
  53.     {
  54.     times = hintRow - row;
  55.     if (row < times)
  56.     {
  57.         [cursor setFirst];
  58.         for (i = 0; i < row; ++i)
  59.         [cursor setNext];
  60.     } else
  61.         for(i = 0; i < times; ++i)
  62.         [cursor setPrevious];
  63.     } else
  64.     if (row > hintRow)
  65.     {
  66.     times = row - hintRow;
  67.     if (times > (count - row))
  68.     {
  69.         times = count - row;
  70.         [cursor setLast];
  71.         for(i = 1; i < times; ++i)
  72.         [cursor setPrevious];
  73.     } else
  74.         for(i = 0; i < times; ++i)
  75.         [cursor setNext];
  76.     }
  77.     
  78.     if ([cursor getKey:(void **)&key andLength:&length])
  79.     {
  80.     [cell setStringValue:key];
  81.     [cell setLoaded:YES];
  82.     }
  83.     
  84.     [cell setLeaf:YES];
  85.     hintRow = row;
  86.     return self;
  87. }
  88.  
  89. - browserClick:sender
  90. {
  91.     [findPanel ping:self];
  92.     [findPanel orderFront:self];
  93.     [findPanel takeStringValueFrom:[[sender matrixInColumn:0] selectedCell]];
  94.     return self;
  95. }
  96.  
  97. - browserDoubleClick:sender
  98. {
  99.     [findPanel ping:self];
  100.     [findPanel orderFront:self];
  101.     [findPanel takeStringValueFrom:[[sender matrixInColumn:0] selectedCell]];
  102.     [findPanel performFind:self];
  103.     return self;
  104. }
  105. @end
  106.